# import pytest
# import allure
# from common.log import logger
# from api.data import *
# import requests
# from config.ip import *
# from common.execl import execl
# from common.time_processing import time1
# import json
# import jsonpath
#
# exl = execl()
# dataS = exl.read_excel('E:\ctms_api\data\he1.xlsx', 'Sheet1', 2, 1)
# '''
# jsonPath :提取json数据返回的内容
#     jsonpath.jsonpath(被提取值,提取的表达式)
#
# replace：替换字符串中的值
#     dataNew=data.replace(被替换的值,替换值)
#
# list(json_path.keys())
#     获取字典键的内容（不是键的值）储存为列表
#
# eval('{}')
#     去字符串引号，从execl读取出的值默认字符串格式
# '''
#
#
# def param(dict1, json_path, data):
#     '''
#     :作用 解决参数依赖（单个或者多个依赖，一个接口依赖于不同的多个接口参数）
#     :param dict1: 接口的返回结果
#     :param json_path: execl里面的局部变量（jsonpath路径）
#     :return: 使用了上个接口返回结果的请求参数
#     '''
#     # name='waybillNo'
#     # 获取jsonPath字典的键值储存为列表
#     # logger.error('替换前的参数：' + data)
#     # logger.error(dict1)
#     for i in range(0, len(list(json_path.keys()))):
#         # logger.debug(range(0,len(list(json_path.keys()))))
#         # name为当前选中的键的名字
#         name = list(json_path.keys())[i]
#
#         # 要提取的目标：接口返回结果。jsonpath提取公式
#         # logger.error('========name======'+name+'...i的值===='+str(i))
#         ti_qu = jsonpath.jsonpath(dict1, json_path[name])[0]
#         ti_qu = str(ti_qu)
#         # logger.error('提取值'+str(name)+' :'+ti_qu)
#         if i > 0:
#             # logger.debug('替换第二个参数前的替换一次后的数据' + dataNew)
#             dataNew = dataNew.replace('${' + str(name) + '}', ti_qu)
#             # 当替换的参数不止一个时，需要循环替换，替换到最后一个为止
#             if i == len(list(json_path.keys())) - 1:
#                 if ('${randoms}' in dataNew) or ('${time}' in dataNew) or ('${time-1}' in dataNew):
#                     dataNew1 = dataNew.replace('${randoms}', ran.randStr(7))
#                     dataNew2 = dataNew1.replace('${time}', time1.get_current_time())
#                     dataNew3 = dataNew2.replace('${time-1}', time1.get_current_time(-1))
#                     return dataNew3
#                 return dataNew
#         # 要替换的目标和替换的值（都要是str类型）
#         dataNew = data.replace('${' + str(name) + '}', ti_qu)
#         # logger.error('替换后的参数：'+dataNew)
#
#     # 随机数依赖
#     if ('${randoms}' in dataNew) or ('${time}' in dataNew) or ('${time-1}' in dataNew):
#         dataNew1 = dataNew.replace('${randoms}', ran.randStr(7))
#         dataNew2 = dataNew1.replace('${time}', time1.get_current_time())
#         dataNew3 = dataNew2.replace('${time-1}', time1.get_current_time(-1))
#         return dataNew3
#     return dataNew
#
#
# # 储存需要的返回结果
# dict1 = {}
#
#
# @pytest.mark.parametrize('title, apiName,method, data, path ,json_path, ex,isSave,isRelyOn', dataS)
# # @allure.title('标题')
# def test_all(title, apiName, method, data, path, json_path, ex, isSave, isRelyOn):
#     logger.debug('------------------{}:用例开始执行------------------'.format(title))
#     # allure注释可以写在下面,写法有些差异
#     allure.dynamic.title(title)
#     # 是否需要依赖参数
#     if isRelyOn == '是':
#         json_path = eval(json_path)
#         data = param(dict1, json_path, data)
#     url = http + ip + path
#     if method == 'post':
#         # 先去字符串把execl的请求参数转为字典格式
#         data = eval(data)
#         logger.info(apiName + '接口最终入参method={},url={},data={}'.format(method, url, data))
#         actual = requests.request(method=method, url=url, data=json.dumps(data), headers=headers).json()
#         logger.info(apiName + '接口最终返回结果={}'.format(actual))
#     elif method == 'get':
#         logger.info(apiName + '接口最终入参method={},url={},data={}'.format(method, url, data))
#         actual = requests.request(method=method, url=url, headers=headers).json()
#         logger.info(apiName + '接口最终返回结果={}'.format(actual))
#     # 指定是否保存返回结果
#     if isSave == '是':
#         dict1[apiName + '的返回结果'] = actual
#         logger.info('保存的返回结果={}'.format(dict1))
#     assert ex in str(actual)
#     logger.debug('------------------{}:用例执行结束------------------'.format(title))
#
#

